﻿using System;
using System.Linq;
using System.Collections.Generic;
using System.Text;
using System.Data.SqlClient;
using Dados.ConexaoSQL;
using System.Data;
using Dados;
using EFITransmissao.Entidade;

namespace EFITransmissao.Dados.ConexaoSQL
{
    public class AcessoDados
    {   
        private SqlConnection conexao;

        #region Contrutores

        /// <summary>
        /// Inicializa a classe de conexão com Banco de Dados.
        /// </summary>
        public AcessoDados()
        {
            string stringconexao = @"Data Source=SFSGP01;Initial Catalog=Leituras;Persist Security Info=True;User ID='coleta';Password='coleta'";
            
            conexao = new SqlConnection(stringconexao);
        }

        /// <summary>
        /// Inicializa a classe de conexão com Banco de Dados.
        /// </summary>
        /// <param name="stringConexao">stringConexao</param>
        public AcessoDados(string stringConexao)
        {
            string stringconexao = @"Data Source=SFSGP01;Initial Catalog=Leituras;Persist Security Info=True;User ID='coleta';Password='coleta'";

            conexao = new SqlConnection(stringconexao);
        }

        /// <summary>
        /// Inicializa a classe de conexão com Banco de Dados.
        /// </summary>
        /// <param name="conexao">conexao</param>
        /// <param name="stringConexao">stringConexao</param>
        public AcessoDados(SqlConnection conexao, string stringConexao)
        {
            string stringconexao = @"Data Source=SFSGP01;Initial Catalog=Leituras;Persist Security Info=True;User ID='coleta';Password='coleta'";

            conexao = new SqlConnection(stringconexao);
        }

        /// <summary>
        /// Inicializa a classe de conexão com Banco de Dados.
        /// </summary>
        /// <param name="trans">MSDataAccess</param>
        public AcessoDados(ref MSTransacao trans)
        {
            conexao = null;
        }

        #endregion

        #region AbrirConexao

        /// <summary>
        /// Abre a conexão com o Banco.
        /// </summary>
        public void AbrirConexao()
        {
            conexao.Open();
        }

        #endregion

        #region FecharConexao

        /// <summary>
        /// Fecha a conexão com o Banco.
        /// </summary>
        public void FecharConexao()
        {
            conexao.Close();
        }

        #endregion

        #region Roteiro

        public DataTable ObterStatusRoteiroDisponivel(string query, string matricula)
        {
            try
            {
                AbrirConexao();

                DataTable dtt = new DataTable();
                Querys qry = new Querys();

                string sql = qry.dbQuery(query);

                SqlCommand comando = new SqlCommand(sql, this.conexao);
                comando.Parameters.Add(new SqlParameter("@matricula", SqlDbType.NVarChar)).Value = matricula;
                
                try
                {
                    SqlDataAdapter adapter = new SqlDataAdapter(comando);
                    adapter.Fill(dtt);
                }
                catch (Exception ex)
                {
                    query = ex.Message;
                }

                return dtt;
            }
            finally
            {
                FecharConexao();
            }
        }

        public DataTable Consultar(string query)
        {
            try
            {
                AbrirConexao();

                DataTable dtt = new DataTable();
                Querys qry = new Querys();

                string sql = qry.dbQuery(query);

                SqlCommand comando = new SqlCommand(sql, this.conexao);

                try
                {
                    SqlDataAdapter adapter = new SqlDataAdapter(comando);
                    adapter.Fill(dtt);
                }
                catch (Exception ex)
                {
                    query = ex.Message;
                }

                return dtt;
            }
            finally
            {
                FecharConexao();
            }
        }

        public DataTable ObterLeituraDisponivel(string query, string matricula)
        {
            try
            {
                AbrirConexao();

                DataTable dtt = new DataTable();
                Querys qry = new Querys();

                string sql = qry.dbQuery(query);

                SqlCommand comando = new SqlCommand(sql, this.conexao);
                comando.Parameters.Add(new SqlParameter("@matricula", SqlDbType.NVarChar)).Value = matricula;

                try
                {
                    SqlDataAdapter adapter = new SqlDataAdapter(comando);
                    adapter.Fill(dtt);
                }
                catch (Exception ex)
                {
                    query = ex.Message;
                }

                return dtt;
            }
            finally
            {
                FecharConexao();
            }
        }

        public DataTable ObterStatusLeituraDisponivel(string query, Roteiro obj)
        {
            try
            {
                AbrirConexao();

                DataTable dtt = new DataTable();
                Querys qry = new Querys();

                string sql = qry.dbQuery(query);

                SqlCommand comando = new SqlCommand(sql, this.conexao);
                comando.Parameters.Add(new SqlParameter("@mat", SqlDbType.NVarChar)).Value = obj.Matricula;
                comando.Parameters.Add(new SqlParameter("@remessa", SqlDbType.Int)).Value = obj.Remessa;
                comando.Parameters.Add(new SqlParameter("@mesFat", SqlDbType.NVarChar)).Value = obj.MesFat;

                try
                {
                    SqlDataAdapter adapter = new SqlDataAdapter(comando);
                    adapter.Fill(dtt);
                }
                catch (Exception ex)
                {
                    query = ex.Message;
                }

                return dtt;
            }
            finally
            {
                FecharConexao();
            }
        }

        public void AtualizandoControleSQL(string query, Roteiro obj)
        {
            try
            {
                AbrirConexao();

                DataTable dtt = new DataTable();
                Querys qry = new Querys();

                string sql = qry.dbQuery(query);

                SqlCommand comando = new SqlCommand(sql, this.conexao);
                comando.Parameters.Add(new SqlParameter("@mat", SqlDbType.NVarChar)).Value = obj.Matricula;
                comando.Parameters.Add(new SqlParameter("@remessa", SqlDbType.Int)).Value = obj.Remessa;
                comando.Parameters.Add(new SqlParameter("@mesFat", SqlDbType.NVarChar)).Value = obj.MesFat;
                comando.Parameters.Add(new SqlParameter("@dtProcessamento", SqlDbType.DateTime)).Value = DateTime.Now;
                
                try
                {
                    SqlDataAdapter adapter = new SqlDataAdapter(comando);
                    adapter.Fill(dtt);
                }
                catch (Exception ex)
                {
                    query = ex.Message;
                }
            }
            finally
            {
                FecharConexao();
            }
        }

        public void InserindoControleLeituraSQL(string query, Roteiro obj)
        {
            try
            {
                AbrirConexao();

                DataTable dtt = new DataTable();
                Querys qry = new Querys();

                string sql = qry.dbQuery(query);

                SqlCommand comando = new SqlCommand(sql, this.conexao);
                comando.Parameters.Add(new SqlParameter("@mat", SqlDbType.NVarChar)).Value = obj.Matricula;
                comando.Parameters.Add(new SqlParameter("@remessa", SqlDbType.Int)).Value = obj.Remessa;
                comando.Parameters.Add(new SqlParameter("@mesFat", SqlDbType.NVarChar)).Value = obj.MesFat;
                comando.Parameters.Add(new SqlParameter("@minOrdem", SqlDbType.NVarChar)).Value = obj.MinOrdem;
                comando.Parameters.Add(new SqlParameter("@maxOrdem", SqlDbType.NVarChar)).Value = obj.MaxOrdem;

                try
                {
                    SqlDataAdapter adapter = new SqlDataAdapter(comando);
                    adapter.Fill(dtt);
                }
                catch (Exception ex)
                {
                    query = ex.Message;
                }
            }
            finally
            {
                FecharConexao();
            }
        }
        
        #endregion
    }
}
